/**
 * 角色实体类
 * 
 * 功能说明：
 * - 存储系统中的角色信息，用于权限控制
 * - 角色是权限的集合，用户通过分配角色获得相应权限
 * - 支持角色启用/禁用状态管理
 * 
 * 数据库设计：
 * - 表名：roles（使用复数形式，符合数据库命名规范）
 * - 主键：继承自BaseEntity的id字段
 * - 索引：name字段有唯一索引，确保角色名称唯一性
 * 
 * 字段约束：
 * - name：角色名称，非空、唯一，用于标识角色
 * - description：角色描述，非空，说明角色用途和权限范围
 * - enabled：启用状态，非空，默认true表示角色可用
 * 
 * 使用场景：
 * - 用户权限管理：通过用户-角色关联表实现用户权限分配
 * - 接口权限控制：在网关层根据用户角色判断接口访问权限
 * - 数据权限控制：根据角色类型限制数据访问范围
 * 
 * @author eCommerce Team
 * @version 1.0
 */
package com.ecommerce.auth.entity;

import com.ecommerce.common.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 角色实体类
 * 存储角色信息，用于权限控制和管理
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "roles")
public class Role extends BaseEntity {

    /**
     * 角色名称
     * - 角色的唯一标识符，如：ADMIN、USER、MERCHANT等
     * - 数据库约束：非空、唯一
     * - 用于权限判断和角色分配
     */
    @Column(nullable = false, unique = true)
    private String name;

    /**
     * 角色描述
     * - 详细说明角色的用途、权限范围和使用场景
     * - 数据库约束：非空
     * - 用于管理员了解角色功能，便于权限管理
     */
    @Column(nullable = false)
    private String description;

    /**
     * 角色启用状态
     * - true：角色启用，可以分配给用户
     * - false：角色禁用，不能分配给用户
     * - 数据库约束：非空
     * - 默认值：true（新角色默认启用）
     */
    @Column(nullable = false)
    private Boolean enabled = true;
}